package dev.grafosPert;

import java.io.*;

import android.content.Context;
import android.util.Log;

public class Ficheros {

	public OutputStreamWriter fout = null;
	public BufferedReader fin = null;
	private Context _ctx;
	private String _nombre;
	
Ficheros f;

	/** Método contructor de la clase Fichero
     * @param nombre - Nombre del fichero a abrir.
     * @param ctx - Contexto de la aplicacion: getApplicationContext()
     * @param modo - 0(machaca), 1(añadir)
     * @return Sin valor de retorno
     * @author Antonio Cubero Fernández
     */
	Ficheros (String nombre, Context ctx, int modo) {
		try {
			switch (modo){
				case 0:
					fout = new OutputStreamWriter(ctx.openFileOutput(nombre, Context.MODE_PRIVATE));
					break;
				case 1:
					fout = new OutputStreamWriter(ctx.openFileOutput(nombre, Context.MODE_APPEND));
					break;
				default:
					Log.e("Error: ", "Valor introducido en el constructor incorrecto.");
			}
			
			fin  = new BufferedReader(new InputStreamReader(ctx.openFileInput(nombre)));
		} catch (Exception ex) {
			Log.e("Error: ", "Reservando memoria. " + ex.toString());
		}
		
		_ctx = ctx;
		_nombre = nombre;
	}

	/** Funcion que incluye una cadena en el fichero y un salto de linea
	 * @param aux - Cadena de texto a incluir
     * @author Antonio Cubero Fernández
     */
	void escribeLinea(String aux) {
		try {
			fout.write(aux + '\n');
			fout.flush();
		} catch(Exception ex) {
		    Log.e("Ficheros", "Error en clase fichero escribeCadena:" + ex.toString());
		}
	}
	
	/** Lee una línea del fichero y la devuelve
     * @return Texto obtenido
     * @author Antonio Cubero Fernández
     */
	String leeCadena(){
		String texto = null;
		try	{
			texto = fin.readLine();
			fout.flush();
		}
		catch (Exception ex) {
		    Log.e("Ficheros", "Error en clase fichero leeCadena:" + ex.toString());
		}
		return texto;
	}
	
	/**Función que guarda una matriz en un fichero
	 * @param matriz - Matriz a guardar
	 * @param nFil - Número de filas de la matriz
	 * @param nCol - Número de columnas de la matriz
	 */
	void guardaMatriz(int [][]matriz, int nFil, int nCol) {
		escribeLinea(Integer.toString(nFil));
		escribeLinea(Integer.toString(nCol));
		
		for(int i=0; i<nFil; i++)
			for(int j=0; j<nCol; j++)
			{
try{				escribeLinea(Integer.toString(matriz[i][j]));    } catch(Exception ex){Log.e("Error", ex.toString());}
Log.e("Escrito", i + ", " + j);
			}
	}

	/**Función que lee una matriz en un fichero y la almacena en el array matriz
	 * @param matriz - Matriz a guardar
	 * @param nFil - Parámetro donde copiar el número de filas de la matriz
	 * @param nCol - Parámetro donde copiar el número de columnas de la matriz
	 */
	void leeMatriz(int [][]matriz, int nFil, int nCol) {
		nFil = (int) Integer.parseInt(leeCadena());
		nCol = (int) Integer.parseInt(leeCadena());
		
		for(int i=0; i<nFil; i++)
			for(int j=0; i<nCol; j++)
				matriz[i][j] = Integer.parseInt(leeCadena());
	}
	
	/** Funcion que reinicia el puntero de lectura.
     * @author Antonio Cubero Fernández
     */
	void reiniciaLectura() {
		try {
			fin  = new BufferedReader(new InputStreamReader(_ctx.openFileInput(_nombre)));
		} catch (Exception ex) {
		    Log.e("Error", "Reset: " + ex.toString());
		}
	}
	
	/** Borra el fichero de texto creando uno nuevo con el mismo nombre pero vacío.
	 * @Nota El puntero de lectura NO es reiniciado.
     * @author Antonio Cubero Fernández
     */
	void reiniciaEscritura()
	{
		try {
			fout = new OutputStreamWriter(_ctx.openFileOutput(_nombre, Context.MODE_PRIVATE));			
		} catch (Exception ex) {
			Log.e("Error: ", "Reservando memoria. " + ex.toString());
		}
	}

    /**Finaliza los ficheros.
     * @author Antonio Cubero Fernández
     */
	void finalizar(){
		try {
			fout.close();
			fin.close();
		} catch (Exception ex) {
			Log.e("Error: ", "Borrando memoria:" + ex.toString());
		}
	}

}
















